#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 函数：模拟FIFO（先进先出）页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
fifo_page_replacement (char *queue_frames, int num)
{
  // TODO
  int *pf = (int *)malloc (sizeof (int) * num); // 页框
  int index=0;
  for (int i = 0; i < num; i++)
    {
      pf[i] = -1;
    }
  int qlen = strlen (queue_frames);
  for (int i = 0; i < qlen; i+=2)
    {
      int hit = 0; // 是否命中内存中的页面
      int id=(int)(queue_frames[i]-'0');
      for (int j = 0; j < num; j++)
        {
          if (pf[j] == id)
            {
              hit = 1; // 命中
              break;
            }
        }
      if (!hit)
        {
          pf[index]=id;
          index=(index+1)%num;
        }
      printf ("Access:%d,Frames: [", id);
      for (int m = 0; m < num - 1; m++)
        {
          printf ("%d,", pf[m]);
        }
      printf ("%d]\n", pf[num - 1]);
    }

  free (pf);
}
